home *** CD-ROM | disk | FTP | other *** search
- /*
- File: MemMgr.h
-
- Contains: Procedural API for memory heaps
-
- Owned by: Jens Alfke
-
- Copyright: © 1994 - 1996 by Apple Computer, Inc., all rights reserved.
-
- Change History (most recent first):
-
- <2> 6/19/96 jpa 1357406: Added MMOverridePlatform et al
-
- */
-
-
- #ifndef _MEMMGR_
- #define _MEMMGR_
- #pragma once
-
- #include <stdlib.h> // For size_t
-
- #ifdef __cplusplus
- extern "C" {
- #endif
-
- #pragma lib_export on
-
-
- //========================================================================================
- // Data types
- //========================================================================================
-
- typedef char MMBoolean;
-
- typedef void* MMBlock;
- typedef const void* ConstMMBlock;
- typedef void* MMHandle; // Handles are opaque as in Windows
-
- typedef struct MemHeap MemHeap; // An opqaue data type
-
- typedef enum MMHeapLocation {
- kMMSysMemory, // Shared system memory, persistent between processes
- kMMAppMemory, // Process's local memory heap
- kMMTempMemory // Local process mem outside its heap; may make sense only on Mac
- } MMHeapLocation;
-
-
- //========================================================================================
- // Configuration
- //========================================================================================
-
- enum{
- kMMDebugConfigMask = 1 // Mask bit for return value from MMConfiguration
- };
-
- long MMConfiguration( );
-
- //========================================================================================
- // Heap management
- //========================================================================================
-
- MemHeap* MMNewHeap( MMHeapLocation, size_t initialSize, size_t growBy,
- const char *name );
- void MMDisposeHeap( MemHeap* );
-
- MemHeap* MMGetDefaultHeap( );
- MemHeap* MMSetDefaultHeap( MemHeap* ); // Returns old default
-
- void MMOverridePlatform ( MMBoolean ptrs, MMBoolean handles );
- void MMEndOverridePlatform( MMBoolean ptrs, MMBoolean handles );
- void MMOverridingPlatform ( MMBoolean*ptrs, MMBoolean*handles );
-
- //========================================================================================
- // Free space management
- //========================================================================================
-
- void MMGetFreeSpace( MemHeap*, size_t *total, size_t *contig );
-
- void MMSystemFreeSpace( MMHeapLocation, size_t *total, size_t *contig );
- // Total free space in that area of RAM, _not_ MM heap free space.
-
- MMBoolean MMAllocateSlushFund( MemHeap*, size_t size, size_t allocSizeLimit );
- size_t MMSlushFundSize( MemHeap* ); // zero if none
- size_t MMFreeSlushFund( MemHeap* ); // returns size freed
-
-
- //========================================================================================
- // Operations on pointer based blocks
- //========================================================================================
-
- MMBlock MMAllocate( size_t size );
- MMBlock MMAllocateClear( size_t size );
-
- MMBlock MMAllocateIn( size_t size, MemHeap* );
- MMBlock MMAllocateClearIn( size_t size, MemHeap* );
-
- MMBlock MMReallocate( MMBlock, size_t size );
- MMBlock MMSplice( MMBlock, size_t offset, long delta );
- void MMFree( MMBlock );
-
- size_t MMBlockSize( ConstMMBlock );
- MemHeap* MMGetHeap( ConstMMBlock );
-
- void MMSetIsObject( MMBlock, MMBoolean isObject );
- MMBoolean MMIsObject( ConstMMBlock );
-
-
- //========================================================================================
- // Operations on relocatable blocks (handles)
- //========================================================================================
-
- MMHandle MMAllocateHandle( size_t );
- MMHandle MMAllocateHandleIn( size_t, MMHeapLocation );
- void MMFreeHandle( MMHandle );
- MMHandle MMCopyHandle (MMHandle );
-
- size_t MMGetHandleSize( MMHandle );
- MMBoolean MMSetHandleSize( MMHandle, size_t );
-
- void* MMLockHandle( MMHandle );
- void MMUnlockPtr( void* ptr );
- void MMUnlockHandle( MMHandle );
-
- //========================================================================================
- // Moving memory in general
- //========================================================================================
-
- void MMMove( void *dst, const void *src, size_t size );
-
-
- #pragma lib_export off
-
- #ifdef __cplusplus
- }
- #endif
-
-
- #endif /*_MEMMGR_*/